import router from '@/router'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'
import store from '@/store'
// 导入动态路由
import { asyncRoutes } from '@/router'


/**
 * // MARK 白名单页面
 * 没token也可以访问的页面的路由数组
 */
const whiteList = ['/login', '/404']
/**
 * //MARK 前置守卫
 * 路由跳转前执行
*/
router.beforeEach(async (to, from, next) => {
  // to,form,next
  nprogress.start()
  if (store.getters.token) {
    // 存在token
    if (to.path === '/login') {
      // 登陆过了不让你到登录页 跳转到主页
      // next()
      next('/') // 中转到主页
      // MARK next（地址）并没有执行后置守卫
      nprogress.done()
    } else {
      // MARK 判断用户信息存在/获取
      if (!store.getters.userId) {
        // console.log(1)
        // 解构出权限 用于添加动态路由
        const { roles } = await store.dispatch('user/getUserInfo')
        // MARK 添加动态路由
        const filterRoutes = asyncRoutes.filter(item => {
          // 路由模块添加name属性与path对应 以便includes判断
          return roles.menus.includes(item.name)
        })
        // 记得这里用命名空间 user/
        store.commit('user/setRoutes', filterRoutes)
        router.addRoutes([
          ...filterRoutes,
          // 404在此处添加 确保在最后拦截路由
          { path: '*', redirect: '/404', hidden: true }
        ])
        next(to.path)// MARK 目的是让路由拥有信息 router的已知缺陷
      }
      // console.log(2)
      else { next() }
    }
  } else {
    // 没有token
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login') // 中转到登录页
      nprogress.done()
    }
  }
})

/** *
 * // MARK 后置守卫
 * 路由跳转完毕后执行
 * **/
router.afterEach(() => {
  nprogress.done()
  // 进度条结束
})
